package com.movefeng.hexoblogadmin.service;

import com.github.pagehelper.Page;
import com.movefeng.hexoblogadmin.dao.CommentDao;
import com.movefeng.hexoblogadmin.dao.UserDao;
import com.movefeng.hexoblogadmin.model.User;
import com.movefeng.hexoblogadmin.vo.UserVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author csp1999
 */
@Service
@Slf4j
public class UserService {

    @Resource
    private UserDao userDao;

    @Resource
    private CommentDao commentDao;

    /**
     * 查询用户列表
     * @param searchParam
     * @return
     */
    public Page<UserVO> queryUserList(Map<String, Object> searchParam) {
        return userDao.queryUserVoList(searchParam);
    }

    /**
     * 批量更新数据库中的user数据
     * @param userList
     */
    @Transactional(rollbackFor = Exception.class)
    public void updateUserBatch(List<User> userList) {
        List<User> usersOld = userDao.selectUserList();

        // 判断对象是否相等需要在类中重写equels和hashcode
        // 新数据中有的而旧数据中没有的就是需要insert的数据
        List<User> toInsert = userList.stream().filter(x -> !usersOld.contains(x)).collect(Collectors.toList());
        // 旧数据中有的而新数据中没有的就是需要delete的数据
        List<User> toDelete = usersOld.stream().filter(x -> !userList.contains(x)).collect(Collectors.toList());

        if (toInsert.size() > 0) {
            userDao.insertUserBatch(toInsert);
        }
        if (toDelete.size() > 0) {
            userDao.deleteUserBatch(toDelete);
        }
    }
}
